www.gusucode.com > matlab从零到进阶程序与数据 > matlab从零到进阶程序与数据/第5章 图形用户界面(GUI)编程/ex54_15.m

    function ex54_15
%使用缺省属性值创建图形窗口对象
s.hf=figure;
%设置图形窗口对象的部分属性值
set(s.hf,...
    'toolbar','figure',...
    'menubar','none',...
    'numbertitle','off',...
    'name','example window',...
    'units','normalized',...
    'position',[0.3 0.4 0.6 0.5]);
%创建坐标轴对象
s.haxes=axes('parent',s.hf,'position',[0.1 0.1 0.5 0.8]);
%初始化绘图数据
x=0:pi/50:2*pi;
y=sin(x);
%指定当前坐标轴
axes(s.haxes);
%绘制图形
s.plot=plot(x,y,'r','linewidth',1.5);
%设置坐标轴的文本为倾斜,x轴的颜色为红色
set(gca,'fontangle','italic','xcolor',[1 0 0]);
%打开栅格
grid on
%给坐标轴对象添加标题
title('我建立的第一个坐标轴');
%给x和y轴添加标签
xlabel('x坐标轴');
ylabel('y坐标轴');
s.hgroup=uibuttongroup('parent',s.hf,...
    'title','栅格控制',...
    'units','normalized',...
    'position',[0.7 0.7 0.1 0.2]);
s.hradio1=uicontrol('parent',s.hgroup,...
    'style','radiobutton',...
    'tag','radiobutton1',...
    'string','grid on',...
    'units','normalized',...
    'position',[0.1 0.7 0.8 0.2]);
s.hradio2=uicontrol('parent',s.hgroup,...
    'style','radiobutton',...
    'tag','radiobutton2',...
    'string','grid off',...
    'units','normalized',...
    'position',[0.1 0.1 0.8 0.2]);
s.text1=uicontrol('parent',s.hf,...
    'style','text',...
    'string','曲线颜色',...
    'units','normalized',...
    'position',[0.7 0.6 0.1 0.05]);
s.list=uicontrol('parent',s.hf,...
    'style','listbox',...
    'string',{'r(红色)';'g(绿色)';'b(蓝色)'},...
    'units','normalized',...
    'position',[0.805 0.55 0.1 0.1]);
s.text2=uicontrol('parent',s.hf,...
    'style','text',...
    'string','曲线线型',...
    'units','normalized',...
    'position',[0.7 0.45 0.1 0.05]);
s.pop=uicontrol('parent',s.hf,...
    'style','popupmenu',...
    'string',{'-';'--';':';'-.';'none'},...
    'units','normalized',...
    'position',[0.805 0.4 0.1 0.1]);
set(s.hgroup,'SelectionChangeFcn',...
    {@buttongroup_SelectionChangeFcn,s});
set(s.list,'callback',{@list_callback,s});
set(s.pop,'callback',{@pop_callback,s});

%菜单操作
s.menu = uimenu('Label','曲线颜色');
uimenu(s.menu,'Label','红色','Callback',{@menu_callback,s},'foregroundcolor',[1 0 0]);
uimenu(s.menu,'Label','绿色','Callback',{@menu_callback,s},'foregroundcolor','g');
uimenu(s.menu,'Label','蓝色','Callback',{@menu_callback,s},'foregroundcolor','b',...
    'Separator','on','Accelerator','b');

% 建立现场菜单
cmenu = uicontextmenu;
% 定义现场菜单项的Callback属性
cb1 = 'set(gco, ''Color'', ''r'')';
cb2 = 'set(gco, ''Color'', ''g'')';
cb3 = 'set(gco, ''Color'', ''b'')';
% 创建现场菜单项
uimenu(cmenu, 'Label', '红色', 'Callback', cb1);
uimenu(cmenu, 'Label', '绿色', 'Callback', cb2);
uimenu(cmenu, 'Label', '蓝色', 'Callback', cb3);
set(s.plot,'UIContextMenu', cmenu);


function buttongroup_SelectionChangeFcn(hObject,...
    eventdata,s)
tag= get(eventdata.NewValue,'Tag');
switch tag
    case 'radiobutton1'
        set(s.haxes,'xgrid','on','ygrid','on');
    case 'radiobutton2'
        set(s.haxes,'xgrid','off','ygrid','off');
end

function list_callback(hObject,...
    eventdata,s)
value= get(hObject,'value');
switch value
    case 1
        set(s.plot,'color','r');
    case 2
        set(s.plot,'color','g');
    case 3
        set(s.plot,'color','b');
end

function pop_callback(hObject,...
    eventdata,s)
value= get(hObject,'value');
switch value
    case 1
        set(s.plot,'linestyle','-','marker','none');
    case 2
        set(s.plot,'linestyle','--','marker','none');
    case 3
        set(s.plot,'linestyle',':','marker','none');
    case 4
        set(s.plot,'linestyle','-.','marker','none');
    case 5
        set(s.plot,'linestyle','none','marker','none');
end

function menu_callback(hObject,...
    eventdata,s)
value= get(hObject,'position');
switch value
    case 1
        set(s.plot,'color','r');
    case 2
        set(s.plot,'color','g');
    case 3
        set(s.plot,'color','b');
end